<%-- 
    Document   : EnrichNet
    Created on : 20-feb-2014, 9:38:50
    Author     : Juan
--%>
<%@page import="analisis.enrichAnalysis.EnrichAnalysisKegg"%>
<%@page import="archivos.BorrarDirectorio"%>
<%@page import="analisis.enrichAnalysis.EnrichAnalysisGO"%>
<%@page import="archivos.Txt"%>
<%@page import="java.util.ArrayList"%>
<%@page import="archivos.Sif"%>
<%@page import="graphs.GraphADT"%>
<%@page import="utils.OS"%>
<%@page import="org.apache.commons.fileupload.FileUploadException"%>
<%@page import="org.apache.commons.fileupload.FileItem"%>
<%@page import="java.util.List"%>
<%@page import="org.apache.commons.fileupload.servlet.ServletFileUpload"%>
<%@page import="java.io.File"%>
<%@page import="org.apache.commons.fileupload.disk.DiskFileItemFactory"%>
<%@page contentType="text/html" pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html lang="en">
    <head>
        <%@include file="../disenoWeb/title.html" %>
        <meta charset="utf-8">
        <%@include file="../disenoWeb/head.html" %>
        <script src="../disenoWeb/js/formulario.js" type="text/javascript"></script>

    </head>
    <body>
        <div class="extra">
            <!--==============================header=================================-->
            <header>
                <%@include file="../disenoWeb/divHeader.jsp" %>
                <div class="menu-row">
                    <div class="menu-bg">
                        <div class="main">
                            <nav class="indent-left">
                                <ul class="menu wrapper">
                                    <%@include file="menuEnrich.html" %>
                                </ul>
                            </nav>
                        </div>
                    </div>
                </div>
                <div class="row-bot">
                    <div class="center-shadow">
                    </div>
                </div>
            </header>
            <%                /*Se inicializan varias variables*/
                String separator = OS.getDirectorySeparator();//Separador para saber el SO
                String sesion = session.getId();//Id de sesion
                String sesionId = "";
                String name = "";
                String org = "";
                String db = "";
                /*Se modifica la varibale de session para saber que se tiene que mostrar si la opcion es 'enrich'*/
                String muestra = "enrich";
                session.setAttribute("muestra", muestra);
                if (session.getAttribute("carpeta") != null) {
                    org = (String) session.getAttribute("carpeta");//Se recoge el organismo que esta en session
                }
                //Se obtiene la ruta raiz
                String ruta0rg = application.getRealPath(separator
                        + "WEB-INF" + separator + "datos");
                String ruta0rgFA = application.getRealPath(separator
                        + "WEB-INF" + separator + "datos" + separator + "orgFA.txt");
                File archivoFA = new File(ruta0rgFA);

                //----------------------------------------------------------
                /*Se crea una nueva carpeta dedicada a este apartado, llamda "Enrich". Dentro de esta carpeta
                 se crearan carpetas por usuario mediante el identificador de session*/
                String ubicacionEnrich = ruta0rg + separator + "Enrich";
                File directorio = new File(ubicacionEnrich);
                File file1 = null;

                /*Si no existe la carpeta "Enrich" se crea*/
                if (!directorio.exists()) {
                    directorio.mkdir();
                }

                //----------------------------------------------------------
                /*Se crea una carpeta mediante el identificador de session*/
                String ubicacionUsuario = ubicacionEnrich + separator + sesion;
                File directorioUsuario = new File(ubicacionUsuario);

                /*Si no existe la carpeta "Enrich" se crea*/
                if (!directorioUsuario.exists()) {
                    directorioUsuario.mkdir();
                }

                //----------------------------------------------------------
                /*Comienza el proceso de subir los archivos indicados por el usuario a la
                 carpeta que se ha creado anteriormente para ello*/
                DiskFileItemFactory factory = new DiskFileItemFactory();
                factory.setSizeThreshold(1024);
                factory.setRepository(directorioUsuario);

                ServletFileUpload upload = new ServletFileUpload(factory);

                try {
                    List<FileItem> partes = upload.parseRequest(request);

                    int cont = -1;
                    for (FileItem item : partes) {
                        cont++;
                        if (item.getFieldName().equals("file")) {
                            if (item.getName().equals("") == false) {
                                file1 = new File(directorioUsuario, item.getName());
                                item.write(file1);
                                sesionId = file1.getPath();
                                name = item.getName();
                                if (!file1.getPath().endsWith(".txt") && cont == 0) {
                                    file1.delete();
                                    String error = "Si";
                                    session.setAttribute("error", error);
                                }

                            }
                        }

                    }
                    if (session.getAttribute("error") == null) {
                        if (session.getAttribute("carpeta") != null) {
                            db = (String) session.getAttribute("db");
                            /*Se obtiene el nombre del fichero obligatorio (.sif) para saber su nombre*/
                            String tituloFObligatorio = file1.getName();
                            session.setAttribute("tituloFObligatorio", tituloFObligatorio);
                        }
                        if (db.equals("kegg")) {
                            //----------------------------------------------------------

                            /*Se crea un objeto de tipo 'EnrichAnalysis' con el cual se obtendrá las diferentes
                             medidas a partir de los ficheros subidos por el usuario y el organismo seleccionado */
                            EnrichAnalysisKegg ea = new EnrichAnalysisKegg(sesionId, org);
                            List<String> nombres = new ArrayList();
                            for (int i = 0; i < ea.getPathways().size(); i++) {
                                nombres.add(ea.getPathways().get(i).getTitle());//Nombres de los pathways utilizados
                            }
                            List<Double> pvalues = ea.getpValues();//Medida pValue de todos los pathways
                            List<Double> bonferronis = ea.getBonferronis();//Medida Bonferronis de todos los pathways
                            List<Double> bonferronisStepDown = ea.getBonferroniStepDown();//Medida BonferroniStepDown de todos los pathways

                            /*Se ponen todas las listas en session para posteriormente pintarlas*/
                            session.setAttribute("nombres", nombres);
                            session.setAttribute("pvalues", pvalues);
                            session.setAttribute("bonferronis", bonferronis);
                            session.setAttribute("bonferronisStepDown", bonferronisStepDown);

                            //----------------------------------------------------------
                    /*Se lee el fichero de entrada (.sif) para obtener la lista de genes*/
                            GraphADT grafo = Sif.leeSIF(file1);
                            List<String> genes = grafo.getVertices();

                            /*Se coloca la lista de genes para depués utilizarla*/
                            session.setAttribute("genes", genes);

                            BorrarDirectorio.borrarDirectorio(directorioUsuario);
                            directorioUsuario.delete();

                        } else {
                            String namespace = Txt.nameSpaceFA(archivoFA, org);
                            org = Txt.orgFA(archivoFA, org);
                            EnrichAnalysisGO ea = new EnrichAnalysisGO(ubicacionEnrich, sesion, org, namespace, name);
                            ea.ScriptFA();
                            if (ea.getTerminos().isEmpty()) {
                                file1.delete();
                                String error = "Si";
                                session.setAttribute("error", error);

                            } else {
                                List<String> terminos = ea.getTerminos();//Medida pValue de todos los pathways
                                List<Double> pvalues = ea.getpValues();//Medida pValue de todos los pathways
                                List<Double> bonferronis = ea.getBonferronis();//Medida Bonferronis de todos los pathways
                                List<Double> bonferronisStepDown = ea.getBonferroniStepDown();//Medida BonferroniStepDown de todos los pathways

                                /*Se ponen todas las listas en session para posteriormente pintarlas*/
                                session.setAttribute("nombres", terminos);
                                session.setAttribute("pvalues", pvalues);
                                session.setAttribute("bonferronis", bonferronis);
                                session.setAttribute("bonferronisStepDown", bonferronisStepDown);

                                //----------------------------------------------------------
                    /*Se lee el fichero de entrada (.sif) para obtener la lista de genes*/
                                GraphADT grafo = Sif.leeSIF(file1);
                                List<String> genes = grafo.getVertices();

                                /*Se coloca la lista de genes para depués utilizarla*/
                                session.setAttribute("genes", genes);

                                BorrarDirectorio.borrarDirectorio(directorioUsuario);
                                directorioUsuario.delete();
                            }
                        }
                    }

                    if (session.getAttribute("error") != null) {

                        directorioUsuario.delete();
            %><form action="formEnrich.jsp" id="error" ></form>
            <script>submitFormulario();</script>                                                      
            <%
            } else {

            %>
            <jsp:forward page="../utilidades/viewTables.jsp"/>

            <%}

                } catch (FileUploadException ex) {
                    out.write("Error al subir archivo " + ex.getMessage());
                }


            %>




            <!--==============================footer=================================-->
            <footer>
                <%@include file="../disenoWeb/footer.html" %>
            </footer>
            <script type="text/javascript"> Cufon.now();</script>




    </body>


</html>
